<html>
    <button>lxy1</button>
    <button>lxy2</button>
    <button>lxy3</button>
</html>
<script>
    var bntArr = document.getElementsByTagName("button");
    // for(var i = 0,len = bntArr.length; i<len; i++){
        // var bntItem = bntArr[i]; 
        //for循环执行完了，才执行onclick函数
        // bntItem.onclick = function(){
            // alert("lxy"+(i+1));
        // }
        //闭包
        // (function(j){
        //     bntArr[j].onclick = function(){
        //         alert("lxy"+(j+1));
        //     }
        // })(i);
    // }

    //闭包理解
        function out(){
            var num = 1;
            function inner(){ //执行函数定义(不用实现内部函数)
                console.log(num);
            }
            // inner(); 
        }
        out();
    //应用1将内部函数作为外部函数的返回值((两次 f() 调用操作的是 同一个闭包中的 num，因此可以累加)
    function FunOut(){
        var num = 1;//私有变量，只能在闭包中存活
        function AddFunInner(){
            num++;
            console.log(num);
        }
        // return FunInner;//函数的返回的值
        function DelFunInner(){
            num++;
            console.log(num);
        }
        return DelFunInner;
    }
    //f存在比保存在，Del存在
    var f = FunOut();//函数被调用（闭包被调用），变量和方法提升开始
    f();
    f();
    f = 1;//f不在引用函数对象，所以FunOut()是垃圾对象  
    // f.num = 0;
    console.log(f.num);//对象属性
</script>